var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Goods = require('../model/goods');
var User = require('../model/user');

//连接MongoDB数据库
mongoose.connect('mongodb://193.112.60.83:27017/mall');

mongoose.connection.on("connected", function () {
  console.log("MongoDB connected success.")
});

mongoose.connection.on("error", function () {
  console.log("MongoDB connected fail.")
});

mongoose.connection.on("disconnected", function () {
  console.log("MongoDB connected disconnected.")
});

//查询商品列表数据(/list是二级路由)
router.get("/list", function (req, res, next) {
  //分页
  let page = parseInt(req.param('page'));
  let pageSize = parseInt(req.param('pageSize'));
  //升降序标志位
  let sortFlag = req.param('sortFlag');
  //价格范围
  let priceRangeCheck = req.param('priceRangeCheck')

  let skip = (page - 1) * pageSize;//skip为跳过不显示的条数（可以看做是indexStart），数组索引从0开始，所以跳过5条，索引从5开始
  //查找参数
  let priceStart = '';
  let priceEnd = '';
  let params = {};
  if (priceRangeCheck !== 'all') {
    switch (priceRangeCheck) {
      case '0':
        priceStart = 0;
        priceEnd = 100;
        break;
      case '1':
        priceStart = 100;
        priceEnd = 500;
        break;
      case '2':
        priceStart = 500;
        priceEnd = 1000;
        break;
    }
    params = {
      salePrice: {     //salePrice需要与数据库中的salePrice对应，是根据它去查的
        $gt: priceStart,//$gt与$let必须写对，是MongoDB规定的属性，根据他们去查范围内的值
        $lte: priceEnd//
      }
    }
  }
  let findResult = Goods.find(params).skip(skip).limit(pageSize);//limit为找到多少条为止
  //用mongoose提供的api对找到结果进行排序
  findResult.sort({'salePrice': sortFlag});//根据排序的对象,1(升序)-1(降序)
  //把找到结果输出到response对象上
  findResult.exec((err, doc) => {
    if (err) {
      res.json({
        status: 1,
        msg: err.message
      })
    } else {
      res.json({
        status: 0,
        msg: 'success',
        result: {
          count: doc.length,
          list: doc
        }
      })
    }
  })
});

//加入到购物车模块
router.post('/addCart', (req, res, next) => {
  let userId = '110110';
  let productId = req.body.productId;
  //查找用户是否存在
  User.findOne({userId: userId},(err,userDoc)=>{
    if (err){
      res.json({
        status: "1",
        msg: err.message
      })
    } else {
      console.log('user:',userDoc);
      if (userDoc){//如果用户存在
        //查看用户是否购买过此类商品，如果有数量加1即可
        let goodItem='';
        userDoc.cartList.forEach(item=>{
          if (item.productId==productId){//已经买过了这件商品
            item.productNum++;
            goodItem=item;
          }
        });
        if (goodItem){//判断goodItem是否为空，如果为空表示没有购买过这件商品,不为空,则把这个模型给同步到数据库
          userDoc.save((err2,userDoc2)=>{//用save方法保存到数据库
            if (err2){
              res.json({
                status: "1",
                msg: err2.message
              })
            } else {
              res.json({
                status:'0',
                msg:'',
                result:'保存成功！'
              })
            }
          })
        } else {//goodItem不存在
          //从商品列表找出这件商品，添加到购物车
          Goods.findOne({productId: productId},(err3,productDoc)=>{
            if(err3){
              res.json({
                status:"1",
                msg:err3.message
              })
            }else {
              if (productDoc){//如果商品存在
                productDoc.productNum=1;//为商品添加新的商品在购物车里所需信息
                productDoc.checked=1;
                userDoc.cartList.push(productDoc);//向用户模型中的购物车（数组）添加新的商品对象
                //把模型数据同步到数据苦中
                userDoc.save((err4,userDoc2)=>{
                  if(err4){
                    res.json({
                      status:"1",
                      msg:err4.message
                    })
                  }else{
                    res.json({
                      status:'0',
                      msg:'success!',
                      result:'用户数据模型同步到数据库成功~'
                    })
                  }
                })
              }
            }
          })
        }
      }
    }
  })
});
module.exports = router;
